# 变量作用域：

# 局部变量
# 全局变量
# 内建变量


### 函数内的局部变量x
def func(x):
    # x是局部变量
    print('x is', x)
    x = 2
    print('Changed local x to', x)

x = 60
func(x)
print('x is still', x)

#### 为什么可以有两个名为x的变量存在， 命名空间
# python使用命名空间记录变量。
# python中的命名空间就像是一个dict，key是变量的名字，value是变量的值。
# python中，每个函数都有一个自己的命名空间，叫做local namespace，它记录了函数的变量。
# python中，每个module有一个自己的命名空间，叫做global namespace，它记录了module的变量，包括 functions, classes 和其它imported modules，还有 module级别的 变量和常量。
# 还有一个build-in 命名空间，可以被任意模块访问，这个build-in命名空间中包含了build-in function 和 exceptions。



### global, 在函数内使用全局变量
def func():
    global x
    b = 1
    c = 1
    print('x is', x)
    x = 2
    print('Changed local x to', x)
    return locals()

x = 60
print(func())
print('x is still', x)
print(globals())


#### 变量查找原则： LEGB

# 从本地变量中 -> Local（function）函数内部
# 在任意上层函数的作用域 -> Enclosing function locals 嵌套函数内部
# 在全局作用域 -> Global（module）
# 最后在内置作用域中查找 -> Built-in（python）





